kind: CronWorkflow
code:yaml
apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
name: test-cron-wf
spec:
schedules:
- "* * * * *" # 毎分実行
concurrencyPolicy: "Replace"
startingDeadlineSeconds: 0
workflowSpec: # 通常のWorkflowの内容
entrypoint: date
templates:
- name: date
container:
image: alpine:3.6
主要フィールドの意味
table:_
フィールド名 デフォルト 説明
schedules なし 実行スケジュール。cron形式で複数指定可能。v3.6以降推奨。
timezone マシンのTZ 例: Asia/Tokyo。DST(夏時間)にも対応。
suspend false true にすると一時停止(スケジュール実行されない)
concurrencyPolicy Allow 複数同時実行の方針:<br> - Allow: 並列許可<br> - Forbid: 前が終わるまで実行しない<br> - Replace: 前を中断して新しいのを実行 startingDeadlineSeconds 0 「直近の実行予定時刻」から何秒以内なら実行を許すか(クラッシュ対応など)
successfulJobsHistoryLimit 3 成功したWorkflowの履歴保持数
failedJobsHistoryLimit 1 失敗したWorkflowの履歴保持数
stopStrategy.expression なし v3.6+ 成功数・失敗数に応じてスケジュールを停止
when なし v3.6+ 実行の可否を判定する式(DST対応・条件実行などに便利)
応用機能
✅ when の使用例(1時間以内の重複実行を防止)
code:yaml
when: "{{= cronworkflow.lastScheduledTime == nil || (now() - cronworkflow.lastScheduledTime).Seconds() > 3600 }}"
直近の実行から1時間以上経っていないと実行されない
DST(夏時間)での重複/欠落実行を回避するのに便利
🛑 stopStrategy.expression の使用例
code:yaml
stopStrategy:
expression: "cronworkflow.succeeded >= 1"
成功したら止める(以後スケジュールされない)
code:yaml
stopStrategy:
expression: "cronworkflow.failed >= 3"
3回失敗したら止める
🧩 CronWorkflowの挙動と注意点
startingDeadlineSeconds を指定しておくと、コントローラーのクラッシュ後に実行漏れをカバーできる。
concurrencyPolicy と組み合わせて、「漏れなく、かつ重複しない」スケジューリングが可能。